﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.Reflection;

namespace SynoManager.Utils
{
    public static class FileAssociation
    {
        public static bool DoesFileAssociationExists(string extension)
        {
            RegistryKey classes = GetClasses();
            RegistryKey extensionKey = classes.OpenSubKey(extension);
            return (extensionKey != null);
        }

        /// <summary>
        /// Create a new file association
        /// </summary>
        /// <param name="extension">Extension of the file type, including the seperator) (ie: ".torrent")</param>
        /// <param name="key">File Type Key (can be referenced to create multiple extensions for one file type)</param>
        /// <param name="description">Description for the file type</param>
        /// <param name="path">Path (ie. '"C:\Executable.exe" "%1"')</param>
        public static void CreateFileAssociation(string extension, string key, string description, string path)
        {
            RegistryKey classes = GetClasses();
            RegistryKey extensionKey = classes.CreateSubKey(extension);
            extensionKey.SetValue(null, key);

            RegistryKey typeKey = classes.CreateSubKey(key);
            typeKey.SetValue(null, description);

            RegistryKey shellKey = typeKey.CreateSubKey("shell");
            RegistryKey shellOpenKey = shellKey.CreateSubKey("open");
            RegistryKey shellOpenCommandKey = shellOpenKey.CreateSubKey("command");
            shellOpenCommandKey.SetValue(null, path);
        }

        private static RegistryKey GetClasses()
        {
            return Registry.ClassesRoot;
            RegistryKey currentUser = Registry.CurrentUser;
            RegistryKey software = currentUser.OpenSubKey("Software");
            return software.OpenSubKey("Classes");
        }

        public static void AssociateTorrents()
        {
            string path = String.Format("\"{0}\" \"%1\"", Assembly.GetEntryAssembly().Location);
            CreateFileAssociation(".torrent","TorrentFile", "BitTorrent Download File", path);
        }

        public static void AssociateNZB()
        {
            string path = String.Format("\"{0}\" \"%1\"", Assembly.GetEntryAssembly().Location);
            CreateFileAssociation(".nzb", "NZBFile", "NZB Download File", path);
        }
    }
}
